/*
 * Factory386.java
 *
 * Created on 28 de marzo de 2007, 06:10 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package ds;

import basic.EncabezadoFormato;
import basic.EncabezadoPlano;
import basic.FactoryBasic;
import bean.Formato383;
import bean.Formato386;
import bean.Plano386;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Vector;

/**
 *
 * @author jsanchez
 */
public class Factory386 extends FactoryBasic {
    
    /** Creates a new instance of Factory386 */
    public Factory386() throws Exception { 
        super(false);
    }
    private Double sumaValor=0.0;
    private void addPlano(Collection CC,Object[] f38i,String UC,String SC,String CO,Integer consecutivo,Map parametros) throws Exception{
        Double valor=0.0;
        Formato383 f383=null;
        if(f38i.length<=0){
            i--;
            consecutivo--;
        }
        for (int _i = 0; _i < f38i.length; _i++) {
            if(f38i[_i] instanceof EncabezadoPlano ){
                EncabezadoPlano plano=((EncabezadoPlano)f38i[_i]);
                if(plano.getUNIDAD_CAPTURA().equals(UC) && plano.getSUBCUENTA().equals(SC) && Integer.valueOf(plano.getCOLUMNA()).equals(Integer.valueOf(CO))){
                    if(plano.getFORMATO().trim().equals("383")){
                        plano.setSUBCUENTA("005");
                    }else if(plano.getFORMATO().trim().equals("385")){
                        plano.setSUBCUENTA("010");
                    }else if(plano.getFORMATO().trim().equals("384")){
                        plano.setSUBCUENTA("015");
                    }else if(plano.getFORMATO().trim().equals("382")){
                        plano.setSUBCUENTA("020");
                    }
                    plano.setCOLUMNA("01");
                    plano.setUNIDAD_CAPTURA("01");
                    plano.setCONSECUTIVO(consecutivo);
                    plano.setFORMATO("386");
                    plano.setTIPO_ENTIDAD(getAtributo("TIPOENTIDAD").toString());
                    plano.setCODIGO_ENTIDAD(getAtributo("CODIGO").toString());                    
                    try{
                        plano.setFECHA_CORTE(resul1.getTimestamp("FECHA_CORTE"));
                    }catch(Exception e){
                        if(resul1.next())
                            plano.setFECHA_CORTE(resul1.getTimestamp("FECHA_CORTE"));
                    }
//                    plano.setPALABRA_CALVE(getAtributo("PC").toString());
                    plano.setAREAR_DE_INFORMACION(getAtributo("AREAINFORMACION").toString());
                    plano.setTIPO_INFORME(getAtributo("TIPOINFORME").toString());
                    //$F{PALABRA_CALVE}==null ? new Boolean(true):new Boolean(false)
                    sumaValor+=(Double) plano.getVALOR();
                    if(parametros.get("TIPO")!=null && parametros.get("TIPO").equals("PLANO")){
                        CC.add(plano);
                        return;
                    }else{
                        Formato386 formato=new Formato386();
                        formato.setCONSECUTIVO(consecutivo);
                        formato.setValor((Double) plano.getVALOR());
                        formato.setLabelSubCuenta(plano.getSUBCUENTA());
                        CC.add(formato);                       
                        return;
                    }
                }
            }else if(f38i[_i] instanceof Formato383){
                f383=new Formato383();
                f383=(Formato383) f38i[_i];
//                System.out.println("->"+f383.getRiesgoDeTasaDeInteres());
//                valor+=f383.getRiesgoDeTasaDeInteres();
                valor+=f383.getValorConvertidoAMonedaLegal();
            }
        }
        if(f383!=null){
            if(parametros.get("TIPO")!=null && parametros.get("TIPO").equals("PLANO")){
                Plano386 plano=new Plano386();
                plano.setTIPO_ENTIDAD(getAtributo("TIPOENTIDAD").toString());
                plano.setCODIGO_ENTIDAD(getAtributo("CODIGO").toString());
                plano.setFECHA_CORTE(resul1.getTimestamp("FECHA_CORTE"));
                plano.setTIPO_REGISTRO("4");
                plano.setAREAR_DE_INFORMACION(getAtributo("AREAINFORMACION").toString());
                plano.setTIPO_INFORME(getAtributo("TIPOINFORME").toString());
                plano.setFORMATO("386");
                plano.setCONSECUTIVO(consecutivo);
                plano.setUNIDAD_CAPTURA("01");
                plano.setSUBCUENTA("005");
                plano.setSIGNO(valor>=0?"+":"-");
                plano.setCOLUMNA("01");
                plano.setVALOR(valor);
                CC.add(plano);
                System.out.println(plano.getTIPO_REGISTRO());
            }else{
                Formato386 formato=new Formato386();
                formato.setCONSECUTIVO(consecutivo);
                formato.setValor(valor);
                formato.setLabelSubCuenta("005");
                CC.add(formato);
            }
            sumaValor+=valor;
        }
    }
    
    int i=1;
    public Object[] getData(Map parametros) throws Exception {
        // TODO Auto-generated method stub
        try {
            Collection CCircular=new Vector();
            executeQuery(parametros);
            //Formato383.getRiesgoDeTasaDeInteres()
            Object TIPO= parametros.get("TIPO");
            System.out.println("-");
            if(TIPO!=null){
                parametros.remove("TIPO");
                CCircular.add(this.getFormatoInicial());
                CCircular.add(this.getSaltoFormato());
                i=3;
            }
            Object[] data=new Factory383().getData(parametros);
            if(TIPO!=null)parametros.put("TIPO","PLANO");

            this.addPlano(CCircular,data,"01","005","01",i++,parametros);
            
            //TASA DE CAMBIO Y ES: UNIDAD_CAPTURA=03 , SUBCUENTA=005, COLUMNA=11
            this.addPlano(CCircular,new Factory385().getData(parametros),"03","005","11",i++,parametros);
            
            // PRECIO DE ACCIONES Y ES: UNIDAD_CAPTURA=15 , SUBCUENTA=005, COLUMNA=4
            this.addPlano(CCircular,new Factory384().getData(parametros),"15","005","4",i++,parametros);
            
            // CARTERAS COLECTIVAS Y ES: UNIDAD_CAPTURA=09 , SUBCUENTA=005, COLUMNA=6
            this.addPlano(CCircular,new Factory382().getData(parametros),"09","005","6",i++,parametros);
            
            if(TIPO!=null){
                parametros.remove("TIPO");
                if(CCircular.size()==2)
                    CCircular.add(this.getFormatoCero("386",i++));
                if(sumaValor!=null && sumaValor>0){
                    Plano386 planoSuma=new Plano386();
                    planoSuma.setCONSECUTIVO(i++);
                    planoSuma.setSUBCUENTA("005");
                    planoSuma.setVALOR(sumaValor);
                    planoSuma.setUNIDAD_CAPTURA("02");
                    System.out.println("--->"+planoSuma.getTIPO_REGISTRO());
                    System.out.println("--->"+planoSuma.getFORMATO());
                    planoSuma.setFORMATO("386");
                    planoSuma.setCOLUMNA("01");
                    planoSuma.setTIPO_REGISTRO("4");
                    planoSuma.setSIGNO(sumaValor>=0?"+":"-");
                    CCircular.add(planoSuma);
                    CCircular.add(this.getFormatoFinal(CCircular));
                }
            }
            Collections.sort((List<EncabezadoFormato>) CCircular);
            return CCircular.toArray();
        } catch (Exception e) {
            throw e;
        }finally{
            this.closeAll();
        }
    }
    
    private  Plano386 getSaltoFormato(){
        Plano386 plano = new Plano386();
        plano .setCONSECUTIVO(2);
        plano .setTIPO_REGISTRO("2");
        plano .setFORMATO("000");
        plano .setCOLUMNA("00");
        plano .setUNIDAD_CAPTURA("11");
        plano .setSUBCUENTA("00000");
        return plano ;
    }
    
    private  Plano386 getFormatoCero(String FORMATO, Integer conse){
        Plano386 plano = new Plano386();
        plano .setTIPO_REGISTRO("4");
        plano .setCONSECUTIVO(conse);
        plano .setFORMATO(FORMATO);
        plano .setCOLUMNA("99");
        plano .setUNIDAD_CAPTURA("99");
        plano .setSUBCUENTA("999");
        plano .setSIGNO("+00000000000000000.00");
        return plano ;
    }
    
    private  Plano386 getFormatoFinal(Collection destino){
        Plano386 plano = new Plano386();
        plano .setCONSECUTIVO(destino.size()+1);
        plano .setTIPO_REGISTRO("5");
        return plano ;
    }
    
    private  Plano386 getFormatoInicial() throws Exception{
        Plano386 plano = new Plano386();
        plano .setCONSECUTIVO(1);
        plano .setTIPO_REGISTRO("1");
        plano .setTIPO_ENTIDAD(getAtributo("TIPOENTIDAD").toString());
        plano .setCODIGO_ENTIDAD(getAtributo("CODIGO").toString());
        if(resul1!=null && resul1.next())
            plano .setFECHA_CORTE(resul1.getTimestamp("FECHA_CORTE"));
        plano .setPALABRA_CALVE(getAtributo("PC").toString());
        plano .setAREAR_DE_INFORMACION(getAtributo("AREAINFORMACION").toString());
        plano .setTIPO_INFORME(getAtributo("TIPOINFORME").toString());
        return plano ;
    }
    
}
